package agent.configuration;


import dev.ai4j.openai4j.DefaultOpenAiClient;
import dev.ai4j.openai4j.OpenAiClient;
import dev.langchain4j.model.dashscope.QwenChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ChatModel {

    @Value("${ai.openAiKey}")
    private String openAiKey ;

    @Value("${ai.baseURL}")
    private String baseURL;

    @Value("${ai.qwenAiKey}")
    private String qwenAiKey;

    @Value("${ai.choose}")
    private Integer choose;



    @Bean
//    @ConditionalOnBean 可以标注在类或方法上，常用属性：

//    // 只有当容器中存在DataSource类型的Bean时，才会创建这个Bean
//    @Bean
//    @ConditionalOnBean(value = DataSource.class)

//    value：指定需要存在的 Bean 的类型（Class 数组）
//    name：指定需要存在的 Bean 的名称（字符串数组）
//    type：指定需要存在的 Bean 的类型名称（字符串数组，用于处理类型无法直接引用的情况）
    public OpenAiChatModel getModel(){

        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey(openAiKey)
                .baseUrl(baseURL)
                .build();


        return model;

    }




    @Bean
    public OpenAiClient getOpenAiClient(){

        return DefaultOpenAiClient.builder().openAiApiKey(openAiKey).baseUrl(baseURL). build();
    }

    @Bean(name = "qwenChatModel")
    public QwenChatModel getQwenChatModel(){
        return QwenChatModel.builder()
                .apiKey(qwenAiKey)
                .baseUrl(baseURL)
                .modelName(ModelList.ChooseModel(choose))
                .build();
    }


}
